<class 'int'>
<class 'float'>
在金融和商业数据分析中,选择正确的数据类型是构建可靠程序的基础。
105.5023000'600000.SH'True数据类型决定了你可以对数据执行哪些操作
| 特征 | 含义 | 举例 |
|---|---|---|
| 动态类型 | 变量无需声明类型,运行时自动绑定 | x = 10 自动识别为int |
| 强类型 | 不同类型之间不会隐式转换 | '10' + 5 会报错 |
0.1 + 0.2 的二进制浮点结果通常是 0.30000000000000004Decimal 或整数最小货币单位,不能仅依赖 floatPython中的数值类型主要包括两大类:
| 类型 | 说明 | 示例 |
|---|---|---|
| int(整型) | 任意精度整数,不限大小 | 100, -5, 0 |
| float(浮点型) | IEEE 754 双精度浮点数 | 3.14, -0.01 |
普通年金(Ordinary Annuity)是金融学中的核心概念,指在每期期末进行等额收付的系列款项。
\[ \large{ FV = A \times \frac{(1+i)^n - 1}{i} } \]
每期末支付金额A,利率i,期数n,各期终值累加为:
\[ \large{ FV = A(1+i)^{n-1} + A(1+i)^{n-2} + \cdots + A } \]
这是首项为A、公比为\((1+i)\)、项数为n的等比数列,由求和公式得:
\[ \large{ FV = \frac{A[(1+i)^n - 1]}{(1+i) - 1} = A \times \frac{(1+i)^n - 1}{i} } \]
A、i、n、F 的业务含义、数据类型或取值范围,并判断哪一个输入最可能改变结果。运行后核对:核对 A、i、n、F 是否按预测参与运算,实际输出是否与预测一致;若不一致,先检查类型、单位、索引/字段和运算顺序。
拓展练习:只改变一个关键输入或业务场景,先预测输出如何变化,再运行验证并解释变化原因。
刚才的代码用到了几个核心语法:
= 将值绑定到变量名
A = 10000 → 每期金额一万元** 表示乘方
(1+i)**n → \((1+0.05)^{10}\)'{:.2f}'.format(F) 保留两位小数年金终值公式在生活中有很多实际应用:
| 场景 | 说明 |
|---|---|
| 养老金规划 | 计算每月定投在退休时的总额 |
| 教育金储备 | 计算每月储蓄教育基金的未来价值 |
| 企业偿债基金 | 为偿还到期债务而建立的偿债基金 |
掌握了年金终值的计算,就掌握了复利的力量!
字符串是Python中用于表示文本数据的类型。
'hello' 或 '沪深300'金融应用场景:
'600000.SH''中国建设银行''2025-12-31's、a 的业务含义、数据类型或取值范围,并判断哪一个输入最可能改变结果。a 的结果;同时写出方向、数量级或表格/图形结构。运行后核对:核对 s、a 是否按预测参与运算,实际输出是否与预测一致;若不一致,先检查类型、单位、索引/字段和运算顺序。
拓展练习:只改变一个关键输入或业务场景,先预测输出如何变化,再运行验证并解释变化原因。
| 代码 | 操作 | 结果 |
|---|---|---|
s[0] |
获取第一个字符 | 'i' |
s[2:5] |
切片(索引2到4) | 'ove' |
s + a |
字符串拼接 | 'ilovepythonhelloworld' |
s.upper() |
转换为大写 | 'ILOVEPYTHON' |
关键点:索引从 0 开始;切片 [start:end] 含首不含尾;+ 对字符串表示拼接、对数字表示加法。
Python 3 采用 Unicode 编码,可以无缝处理中文字符:
7
沪
沪深
每个中文字符和英文字符在索引时地位相同,都占一个位置。
# 证券代码标准化:拼接股票代码与交易所标识
stock_code = '000001'
exchange = 'SZ'
full_code = stock_code + '.' + exchange
print(full_code) # 000001.SZ (平安银行)
# 公司名称格式化:首字母大写
company = 'china construction bank'
print(company.title()) # China Construction Bank
# 从完整代码中提取交易所信息
code_with_exchange = '600000.SH'
market = code_with_exchange.split('.')[1]
print(market) # SH (上海证券交易所)000001.SZ
China Construction Bank
SH
不同来源的金融数据,其类型可能不一致:
'10.55'10.55Python是强类型语言,不同类型之间不能直接运算,必须显式转换。
| 函数 | 功能 | 示例 | 金融应用 |
|---|---|---|---|
int() |
转为整型 | int('123') → 123 |
交易量转换 |
float() |
转为浮点型 | float('3.14') → 3.14 |
价格转换 |
str() |
转为字符串 | str(100) → '100' |
输出展示 |
bool() |
转为布尔型 | bool(1) → True |
状态判断 |
交易金额: 1055.00
错误: can only concatenate str (not "int") to str
强类型的好处:避免因隐式转换导致的金融计算错误!
语法预览:本页开始出现
if/else,只要求读懂输入与输出;独立编写分支放在第 8 章随堂练习,零基础学习者可按课程入口路线先完成第 2、8、9 章。
布尔类型只有两个值,在金融决策中广泛用于条件判断。
常用比较运算符:
| 运算符 | 含义 | 示例 |
|---|---|---|
>, < |
大于、小于 | 105 > 100 → True |
>=, <= |
大于等于、小于等于 | 100 >= 100 → True |
== |
等于 | 10 == 10 → True |
!= |
不等于 | 10 != 5 → True |
| 运算符 | 含义 | 规则 |
|---|---|---|
and |
与 | 两个都为True才为True |
or |
或 | 任一为True就为True |
not |
非 | 取反 |
是否进入REVIEW: False
当前示例中的数值 102.5 位于两个假设边界之间,因此程序显示
REVIEW。这只是课堂判断结果,不是交易指令。
Python中所有对象都可以进行布尔值测试:
被视为 False (Falsy) |
被视为 True (Truthy) |
|---|---|
None |
非None的任何对象 |
0, 0.0 |
非零数值 |
'' (空字符串) |
非空字符串 |
[], (), {} (空容器) |
非空容器 |
False |
True |
0.30000000000000004
False
原因:0.1 和 0.2 在二进制中无法精确表示(类似于 \(1/3\) 在十进制中无法精确表示)。
在金融计算中,这种微小误差可能累积失控!
import math
from decimal import Decimal, getcontext
# 方法1:近似比较 (math.isclose)
print(math.isclose(0.1 + 0.2, 0.3)) # True
# 方法2:Decimal模块 (精确十进制运算)
getcontext().prec = 6 # 设置6位有效数字
price1 = Decimal('0.1') # 注意:参数必须是字符串
price2 = Decimal('0.2')
result = price1 + price2
print(result) # 0.3 (精确!)
print(result == Decimal('0.3')) # TrueTrue
0.3
True
金融计算最佳实践:
Decimal 模块math.isclose() 而非 ==| 数据类型 | 关键字 | 金融应用 |
|---|---|---|
| int | 整型 | 交易量、期数 |
| float | 浮点型 | 股价、利率 |
| str | 字符串 | 证券代码、公司名称 |
| bool | 布尔型 | 条件判断、交易信号 |
核心要点:
Decimalstr、交易所 str、金额与费率 Decimalfrom decimal import Decimal, localcontext # 使用局部十进制上下文隔离前序单元的精度状态
raw_security_code='600519' # 保留证券代码的字符语义
exchange_code='SH' # 指定交易所后缀
standard_security_code=f'{raw_security_code.zfill(6)}.{exchange_code}' # 生成标准证券代码
with localcontext() as money_context: # 为金额乘法建立不受全章共享状态影响的局部环境
money_context.prec=28 # 设置足够精度以容纳大额本金和费率乘积
cash_amount=Decimal('100000.00') # 以字符串构造精确金额
fee_rate=Decimal('0.0003') # 以字符串构造精确费率
net_cash=cash_amount*(Decimal('1')-fee_rate) # 计算扣费后金额
rounded_net_cash=net_cash.quantize(Decimal('0.01')) # 按结算口径保留到分
assert standard_security_code=='600519.SH' # 另行核对代码格式
assert rounded_net_cash==Decimal('99970.00') # 用期望金额检查核对局部精度与舍入口径
print(standard_security_code,rounded_net_cash) # 输出代码与金额str 才能保留前导零和市场后缀;金额用二进制 float 可能出现显示误差,结算口径宜用 Decimal。边界是高性能统计估计仍常用 float,但须在结算层统一舍入。100000×(1−0.0003) 双重验证。600519.SH 99970.00,并通过格式检查Decimal(0.1);把 5% 写成 5[商业大数据分析与应用]